package base.producer;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

import java.nio.charset.Charset;

/**
 * base 基本样例
 * 发送同步消息：消息可靠，客户端会阻塞等待MQ服务端收到消息，并返回通知，才执行下一步。保证消息可靠发送。
 * @author: BacHe
 * @email: 1218585258@qq.com
 * @Date: 2020/12/7 21:51
 */
public class SyncProducer {
    public static void main(String[] args) throws Exception {
        //1.创建消息生产者 producer，并指定生产者组名 group1
        DefaultMQProducer producer = new DefaultMQProducer("group1");
        //2.指定Nameserver地址,集群用分号;隔开 。
        // TODO（注意防火墙要开放指定端口,Nameserver端口9876 ,broker端口10911,broker要设置配置文件启动）
        producer.setNamesrvAddr("47.107.104.169:9876");
        //3.启动producer
        producer.start();

        for (int i = 0; i < 100; i++) {
            //4.创建消息对象，指定主题Topic、Tag 和消息体
            /**
             *
             * TODO 参数1：topic主题 （大分类）
             * TODO 参数2：tag （小分类） 可无
             * TODO 参数3：body （消息内容）
             */
            String body = "rocketmq 发送同步消息 安琪拉"+i;
            Message message = new Message("topic1",body.getBytes("UTF-8"));
            //key用于在控制台,检索消息。唯一。
            message.setKeys("000001");
            //5.发送消息,拿到返回结果.
            SendResult result = producer.send(message);
            System.out.println(result);
// "SendResult [sendStatus=" + this.sendStatus + ", msgId=" + this.msgId + ",
// offsetMsgId=" + this.offsetMsgId + ", messageQueue=" + this.messageQueue + ",
// queueOffset=" + this.queueOffset + "]";
            //睡一下，看到有节奏的输出。
            Thread.sleep(1000);
        }
        //6.关闭生产者producer
        producer.shutdown();
    }
}
